//此文件充当main函数

#include <unistd.h>
#include "TcpServer.hpp"
#include "ServerCalculator.hpp"
#include "Daemon.hpp"



static void Usage(const std::string& proc)
{
    std::cout<<"\nUsage: "<<proc<<" port\n"<<std::endl;
}


// ./servercal 8080
int main(int argc,char* argv[])
{
    if(argc!=2)
    {
        Usage(argv[0]);
        exit(0);
    }
    uint16_t port=std::stoi(argv[1]);

    ServerCal cal;
    TcpServer* tsvp=new TcpServer(port,std::bind(&ServerCal::Calculator,&cal,std::placeholders::_1));  //将Calculator方法绑定到TcpServer中的回调方法
    tsvp->InitServer();
    //Daemon();
    daemon(0,0);
    tsvp->Start();
    // Response resp(1000, 0);
    // std::string content;
    // resp.Serialize(&content);
    // std::cout << content << std::endl;  //序列化后的报文
    // std::string package = Encode(content);
    // std::cout << package;               //封装报头后的报文

    // content = "";                         
    // bool r = Decode(package, &content); //拿下报头后的报文
    // std::cout << content << std::endl;

    // Response temp;
    // temp.Deserialize(content);             

    // std::cout << temp.result << std::endl;  //报文反序列化后得到结构化的数据
    // std::cout << temp.code << std::endl;


    // Request req(123,456,'+');
    // std::string s;
    // req.Serialize(&s);
    // s=Encode(s);
    // std::cout<<s;

    // std::string content;
    // bool r=Decode(s,&content);
    // std::cout<<content<<std::endl;

    // Request temp;
    // temp.Deserialize(content);
    // std::cout<<temp.x<<std::endl;
    // std::cout<<temp.op<<std::endl;
    // std::cout<<temp.y<<std::endl;
    return 0;
}